package com.bj58.groupbuy.action.util;


import java.util.List;

/**
 * @author Name：hongzhenhua，Email：hzh262000@163.com
 * @param <T>
 */
public class Paginate<T> implements java.io.Serializable {

	private static final long serialVersionUID = -5166994690984600072L;

	// 设置每页默认的的记录数
	public final static int DEFAULT_PAGE_SIZE = 10;

	// 每页的记录数
	private int pageSize = DEFAULT_PAGE_SIZE;

	// 当前页在list中的位置,从0开始
	private int pageIndex;

	// 总记录数
	private int recordCount;
	
	private List<T> items;

	/***********************************************************************
	 * 构造方法,构造空页
	 */
	public Paginate() {
	}

//	/***********************************************************************
//	 * 构造方法
//	 * 
//	 * @param items
//	 *            本页包含的数据
//	 * @param recordCount
//	 *            数据库中的总记录条数
//	 */
//	public Paginate(int recordCount) {
//		this.recordCount = recordCount;
//	}
//
//	/***********************************************************************
//	 * 构造方法
//	 * 
//	 * @param items
//	 *            本页包含的数据
//	 * @param recordCount
//	 *            数据库中的总记录条数
//	 * @param startIndex
//	 *            本页数据在数据库中的起始位置
//	 */
//	public Paginate(int recordCount, int startIndex) {
//		this.recordCount = recordCount;
//		this.startIndex = startIndex;
//	}

	/***********************************************************************
	 * 构造方法
	 * 
	 * @param items
	 *            本页包含的数据
	 * @param recordCount
	 *            数据库中的总记录条数
	 * @param pageIndex
	 *            本页数据在数据库中的起始位置
	 * @param pageSize
	 *            本页的数据条数
	 */
	public Paginate(int recordCount, int pageIndex, int pageSize) {
		this.recordCount = recordCount;
		this.pageIndex = pageIndex;
		this.pageSize = pageSize;
	}
	
	public Paginate(int recordCount, int pageIndex, int pageSize,List<T> items) {
		this.recordCount = recordCount;
		this.pageIndex = pageIndex;
		this.pageSize = pageSize;
		this.items = items;
	}

	/***********************************************************************
	 * 获取当前页码,从1开始
	 * 
	 * @return
	 */
	public int getCurrentPageNo() {
		return pageIndex;
	}
	
	public int getPreviousPageNo(){
		return this.getCurrentPageNo()-1;
	}
	
	public int getNextPageNo(){
		return this.getCurrentPageNo()+1;
	}

	/**
	 * 获取首页页码
	 * 
	 * @return
	 */
	public int getFirstPage() {
		return 1;
	}

	/**
	 * 获取尾页页码
	 * 
	 * @return
	 */
	public int getEndPage() {
		return getPageCount();
	}

	/***********************************************************************
	 * 获取总页数
	 * 
	 * @return
	 */
	public int getPageCount() {
		if (recordCount % pageSize == 0) {
			return recordCount / pageSize;
		} else {
			return recordCount / pageSize + 1;
		}
	}

	/***********************************************************************
	 * 判断是否有下一页
	 * 
	 * @return
	 */
	public boolean hasNextPage() {
		if (getCurrentPageNo() < getPageCount()) {
			return true;
		} else {
			return false;
		}
	}
	
	public boolean getHasNextPage(){
		return hasNextPage();
	}

	/***********************************************************************
	 * 判断是否有上一页
	 * 
	 * @return
	 */
	public boolean hasPreviousPage() {
		if (getCurrentPageNo() > 1) {
			return true;
		} else {
			return false;
		}
	}
	
	public boolean getHasPreviousPage() {
		return hasPreviousPage();
	}

	/***********************************************************************
	 * 获取任一页第一条数据的位置,startIndex从0开始
	 * 
	 * @param pageNo
	 *            指当前页码
	 * @param pageSize
	 *            每页的记录条数
	 * @return
	 */
	public static int getPageIndex(int pageNo, int pageSize) {
		return (pageNo - 1) * pageSize;
	}

	/***********************************************************************
	 * 获取任一页第一条数据的位置,每页的条数使用默认值
	 * 
	 * @param pageNo
	 *            指当前页码
	 * @return
	 */
	public static int getPageIndex(int pageNo) {
		return (pageNo - 1) * DEFAULT_PAGE_SIZE;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}

	public int getRecordCount() {
		return recordCount;
	}

	public void setRecordCount(int recordCount) {
		this.recordCount = recordCount;
	}

	public int getStartIndex() {
		return pageIndex;
	}

	public void setStartIndex(int startIndex) {
		this.pageIndex = startIndex;
	}


	public List<T> getItems() {
		return items;
	}

	public void setItems(List<T> items) {
		this.items = items;
	}
}
